package com.baitiaojun.common.utils.math;

import cn.hutool.core.util.ObjectUtil;

import java.math.BigDecimal;

public class CalculateUtils {

    private static final int DEF_DIV_SCALE = 2; //默认精度

    public static double add(double v1, double v2) {
        BigDecimal num1 = new BigDecimal(v1);
        BigDecimal num2 = new BigDecimal(v2);
        return num1.add(num2).doubleValue();
    }

    public static double sub(double v1, double v2) {
        BigDecimal num1 = new BigDecimal(v1);
        BigDecimal num2 = new BigDecimal(v2);
        return num1.subtract(num2).doubleValue();
    }

    public static double mul(double v1, double v2) {
        BigDecimal num1 = new BigDecimal(v1);
        BigDecimal num2 = new BigDecimal(v2);
        return num1.multiply(num2).doubleValue();
    }

    /**
     * 默认精度范围进行除法运算
     * @param v1 被除数
     * @param v2 除数
     * @return
     */
    public static double div(double v1, double v2) {
        return div(v1, v2, DEF_DIV_SCALE);
    }

    /**
     * 指定精度范围进行除法运算
     * @param v1 被除数
     * @param v2 除数
     * @param scale
     * @return
     */
    public static double div(double v1, double v2, int scale) {
        if (ObjectUtil.isNull(v1)) {
            return BigDecimal.ZERO.doubleValue();
        }
        if (scale < 0) {
            throw new IllegalArgumentException("范围必须是0或大于0");
        }
        BigDecimal num1 = new BigDecimal(v1);
        BigDecimal num2 = new BigDecimal(v2);
        return num1.divide(num2, scale).doubleValue();
    }
}
